4.8
修改表 4-2 中的反向传播算法,使用双曲正切 tanh 函数取代 sigmoid 函数作为挤压函数。也就是说,假定单个单元的输出是 o=tanh(w⋅x)。给出输出层权值和隐藏层权值的权更新法则。提示:tanh′(x)=1−tanh2(x)。
修改后的表 4-2:包含两层双曲正切单元的前馈网络的反向传播算法(随机梯度下降版本)
BACKPROPAGATION(training_examples, η,nin,nout,nhidden)
training_examples 中每一个训练样例是形式为 <x,t> 的序偶,其中 x 是网络输入值向量,t 是目标输出值。
η 是学习速率(例如 0.05)。nin 是网络输入的数量,nhidden 是隐藏层单元数,nout 是输出单元数。
从单元 i 到单元 j 的输入表示为 xji,单元 i 到单元 j 的权值表示为 wji。
- 创建具有 nin 个输入,nhidden 个隐藏单元,nout 个输出单元的网络
- 初始化所有的网络权值为小的随机值(例如 -0.05 和 0.05 之间的数)
在遇到终止条件前:
对于训练样例 training_examples 中的每个 <x,t>:
把输入沿网络前向传播
1. 把实例 x 输入网络,并计算网络中每个单元 u 的输出 ou
使误差沿网络反向传播
2. 对于网络中的每个输出单元 k,计算它的误差项 δk
δk←(1−ok2)(tk−ok)(4.14)
3. 对于网络中的每个隐藏单元 h,计算它的误差项 δh
δh←(1−oh2)k∈outputs∑wkhδk(4.15)
4. 更新每个网络权值 wji
wji←wji+Δwji
其中
Δwji=ηδjxji(4.16)
其中对于误差项的计算如下:
反向传播法则的推导
这里给出反向传播算法的权值调整法则的推导。
我们要解决的问题是推导出上表算法使用的随机梯度下降法则。根据公式(11):
Ed(w)=21(td−od)2(11)
,随机的梯度下降算法迭代处理训练样例,每次处理一个。对于每个训练样例 d,利用关于这个样例的误差Ed的梯度修改权值。换句话说,对于每一个训练样例d,每个权wji被增加Δwji:
Δwji=−η∂wji∂Ed(12)
其中,Ed是训练样例d的误差,通过对网络中所有输出单元的求和得到:
Ed(w)≡21k∈outputs∑(tk−ok)2
这里,outputs 是网络中输出单元的集合,tk是单元k对于训练样例d的目标值,ok是给定训练样例d时单元k的输出值。
随机梯度下降法则的推导在概念上是易懂的,但需要留意很多下标和变量。我们将遵循下图中所画出的符号,增加一个下标 j 用来表示网络中第 j 个单元。
具体如下:
- xji=单元j的第i个输入
- wji=与单元j的第i个输入相关联的权值
- netj=∑iwjixji(单元j的输入的加权和)
- oj=单元j计算出的输出
- tj=单元j的目标输出
- tanh=双曲正切函数
- outputs=网络最后一层的单元的集合
- Downstream(j)=单元的直接输入(immediateinputs)中包含的单元j的输出的单元的集合
现在我们导出∂wji∂Ed 的一个表达式,以便实现公式(12)中所讲的随机梯度下降法则。首先,注意权值wji仅能通过netj影响网络的其他部分。所以,我们可以使用链式规则得到:
∂wji∂Ed=∂netj∂Ed∂wji∂netj
=∂netj∂Edxji(13)
已知等式(13),我们剩下的任务就是为∂netj∂Ed导出一个方便的表达式。我们依次考虑两种情况:一种情况是单元 j 是网络中的一个输出单元,另一种情况是 j 是一个内部单元。
情况 1:输出单元的权值训练法则
就像wji仅能通过netj影响网络一样,netj仅能通过oj影响网络。所以我们可以再次使用链式规则得出:
∂netj∂Ed=∂oj∂Ed∂netj∂oj(14)
首先,仅考虑上式(14)中的第一项:
∂oj∂Ed=∂oj∂21k∈outputs∑(tk−ok)2
除了当k=j时,所有输出单元k的导数∂oj∂(tk−ok)2为0.所以我们不必对多个输出单元求和,只需要设k = j。
∂oj∂Ed=∂oj∂21(tj−oj)2
=212(tj−oj)∂oj∂(tj−oj)
=−(tj−oj)(15)
接下来考虑公式(14)中的第二项。既然oj=tanh(netj),导数 ∂netj∂oj 就是tanh 函数的导数,由提示可知:tanh′(netj)=1−tanh2(netj)。所以:
∂netj∂oj=∂netj∂tanh(netj)
=1−oj2(16)
把表达式(15)和(16)代入(14),我们得到:
∂netj∂Ed=−(tj−oj)(1−oj2)(17)
然后与公式(12)和(13)合并,我们便推导出了输出单元的随机梯度下降法则:
Δwji=−η∂wji∂Ed=η(tj−oj)(1−oj2)xji(18)
注意,这个训练法则恰恰是修改后的表4-2算法中的公式(4.14)和公式(4.16)的权值更新法则。此外,我们可以发现公式(4.14)中的δk与−∂netk∂Ed 的值相等,所以可以使用 δi 来表示任意单元i的−∂netj∂Ed。
情况 2:隐藏单元的权值训练法则
对于网络中的内部单元或者说隐藏单元的情况,推导wji必须考虑wji间接地影响网络输出,从而影响Ed。由于这个原因,我们发现定义网络中单元j地所有直接下游单元的集合(也就是直接输入中包含单元 j 的输出的所有单元)是有用的。我们用 Downstream(j) 表示这样的单元集合。注意,netj只能通过Downstream(j)中的单元影响网络输出(再影响Ed)。所以可以得出如下推导:
∂netj∂Ed=k∈Downstream(j)∑∂netk∂Ed∂netj∂netk
=k∈Downstream(j)∑−δk∂netj∂netk
=k∈Downstream(j)∑−δk∂oj∂netk∂netj∂oj
=k∈Downstream(j)∑−δkwkj∂netj∂oj
=k∈Downstream(j)∑−δkwkj(1−oj2)
重新组织各项并使用δj表示−∂netj∂Ed,我们得到:
δj=(1−oj2)k∈Downstream(j)∑δkwkj
和
Δwji=ηδjxji
上式就是由公式(4.19)得到的一般法则,用来更新任意有向无环网络结构内部单元的权值。
δr=(1−or2)s∈Downstream(r)∑wsrδs(4.19)
注意,修改后表4-2中的公式(4.15)仅是这个法则当Downstream(j) = outputs时的一个特例。